package com.sam.algorithm.sha;

import java.util.Map;
import java.util.Set;

/**
 * 生产签名工具类
 */
public class SignUtil {

    private static String secret = "e10adc3949ba59abbe56e057f20f883f";

    /**
     * 根据Map生成签名
     *
     * @param map map数据
     * @return 签名
     */
    public static String generatorSign(Map<String, Object> map) {
        map.remove("sign");
        //排序
        Map<String, Object> stringObjectMap = MapSortUtil.sortMapByKey(map);
        //转格式
        Set<Map.Entry<String, Object>> entries = stringObjectMap.entrySet();
        //存放StringBuilder
        StringBuilder sb = new StringBuilder();
        //遍历
        for (Map.Entry<String, Object> entry : entries) {
            sb.append(entry.getKey() + ":" + entry.getValue()).append("&");
        }
        //组装secret
        sb.append("secret").append(secret);
        //生产签名
        return SHA256Util.getSHA256String(sb.toString());
    }

    /**
     * 校验签名
     *
     * @param map  map数据
     * @param sign 签名
     * @return 校验结果
     */
    public static Boolean checkSign(Map<String, Object> map, String sign) {
        //生产Sign
        String signGenera = generatorSign(map);
        //校验Sign
        if (signGenera.equals(sign)) {
            return true;
        }
        return false;
    }
}